/*
 * File:   main.cpp
 * Author:Jon Barg, Kathrin Holzmann, Sandra Kerntke
 *
 * Created on 7. April 2010, 15:23
 */


#include "Medium.h"
#include "Buch.h"
#include "Video.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>

using std::string;
using namespace std;
const int max_medien = 5;

// main method
int main(void){

//Three arrays for three object types
Medium* arr_medien[max_medien];
Buch* arr_buch[max_medien];
Video* arr_video[max_medien];

//number of created arrays
int anz_medien = 0, anz_buch = 0,anz_video=0, sig=0;
// user command
char cmd;
// boolean variables for checking lends and returns
bool leihen, rueck;

    cout<<"\n"<<endl;
    cout<<"Waehlen Sie einen Befehl aus: \n"<<endl;
    cout<<"m "<<setw(15)<<"= "<<setw(14)<<"Medium anlegen"<<endl;
    cout<<"b "<<setw(15)<<"= "<<setw(12)<<"Buch anlegen"<<endl;
    cout<<"v "<<setw(15)<<"= "<<setw(13)<<"Video anlegen"<<endl;
    cout<<"i "<<setw(15)<<"= "<<setw(15)<<"Mediumeigenschaften anzeigen"<<endl;
    cout<<"e "<<setw(15)<<"= "<<setw(15)<<"zuletzt angelegtes Medium ausleihen"<<endl;
    cout<<"r "<<setw(15)<<"= "<<setw(15)<<"zuletzt angelegtes Medium zurueckgeben"<<endl;
    cout<<"q "<<setw(15)<<"= "<<setw(15)<<"beendet das Programm"<<endl;
    cout<<"\n\n"<<endl;

   // while loop for the programm
    while(true){

        cout<<"\n"<<endl;
        cout<<"Befehl:"<<endl;
        //readin the user command
        cin>>cmd;

        switch(cmd){
            case 'm':
                // create new medium
                if(anz_medien<max_medien){
                    arr_medien[anz_medien] = new Medium;
                    anz_medien++;
                }else{
                    cout <<"\n Maximale Anzahl von Medien erreicht";
                }
                    break;
            case 'b':
              //create new book
                if(anz_buch<max_medien){
                    arr_buch[anz_buch] = new Buch;
                    anz_buch++;
                }else{
                    cout <<"\n Maximale Anzahl von Buechern erreicht"<<endl;
                }
                    break;
            case 'v':
               //create new video
            if(anz_video<max_medien){
                   arr_video[anz_video] = new Video;
                    anz_video++;
                }else{
                    cout <<"\n Maximale Anzahl von Videos erreicht"<<endl;
                }
                    break;
            case 'i':
                //printing out all objects
                cout<<"Medienbestand"<<endl;
            if (arr_medien[0] != NULL || arr_buch[0] != NULL || arr_video[0] != NULL) {
		cout << endl;
		for (int i = 0; i < anz_medien; i++)
			arr_medien[i]->print();

		for (int i = 0; i < anz_buch; i++)
			arr_buch[i]->print();
		cout << endl;

               for (int i = 0; i < anz_video; i++)
			arr_video[i]->print();
		cout << endl;
	}
                    break;
            case 'e':
                //lend a object by signature
                leihen=false;
                cout<<"leihen"<<endl;
                cout<<"Signatur: "<<endl;
                do {
                    cin.clear();
                    cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                } while (!(cin >> sig) && cin.fail());

                if (arr_medien[0] != NULL || arr_buch[0] != NULL || arr_video[0] != NULL) {
		cout << endl;
		for (int i = 0; i < anz_medien; i++)
                    if(!leihen){
			leihen = arr_medien[i]->leihen(sig);
                      }
		for (int i = 0; i < anz_buch; i++)
                    if(!leihen){
			leihen = arr_buch[i]->leihen(sig);
                        }

                for (int i = 0; i < anz_video; i++)
                    if(!leihen){
			leihen = arr_video[i]->leihen(sig);
                        }
		
                
                if(!leihen){
                    cout <<"Kein Medium mit dieser Signatur vorhanden";
                }
                    cout << endl;
                }
                    break;
            case 'r':
                //return a object by signature
                rueck=false;
                cout<<"rueckgabe"<<endl;
                cout<<"Signatur: "<<endl;
                do {
                    cin.clear();
                    cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                } while (!(cin >> sig) && cin.fail());

                if (arr_medien[0] != NULL || arr_buch[0] != NULL || arr_video[0] != NULL) {
		cout << endl;
		for (int i = 0; i < anz_medien; i++)
                    if(!rueck){
			rueck = arr_medien[i]->rueckgabe(sig);
                      }

		for (int i = 0; i < anz_buch; i++)
                    if(!rueck){
			rueck = arr_buch[i]->rueckgabe(sig);
                        }

                for (int i = 0; i < anz_video; i++)
                    if(!rueck){
			rueck = arr_video[i]->rueckgabe(sig);
                        }

                if(!rueck){
                    cout <<"Kein Medium mit dieser Signatur vorhanden";
                }
                    cout << endl;
                }
                break;
            case 'q':
                // ending up und clean
             	for (int i = 0; i < anz_medien; i++) {
                    delete arr_medien[i];
                }
                for (int i = 0; i < anz_buch; i++) {
                    delete arr_buch[i];
                }
                for (int i = 0; i < anz_video; i++) {
                    delete arr_video[i];
                }
                    exit(0);
                break;
            default:
                //panic key
                cout<<"Falsche Eingabe!"<<endl;
                exit(1);
        }
    }
    return 0;
}

